//20210808
/**
 * 解题思路：通过栈来解决(先进后匹配的规律)
 * 栈的最后一位与当前brackets的索引元素匹配则出栈，要是不匹配则进栈
 * 注意：预防当前brackets的索引元素有可能是undefined和stack[最后一位]为undefined
 * 时间复杂度：O(N)
 * 空间复杂度：O(N)
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    const brackets={
        ")":"(",
        "]":"[",
        "}":"{"
    }
    let stack=[];
    for (let index = 0; index < s.length; index++) {
        const element = s[index];
        //如果当前的元素能与栈里最后一位匹配则出栈，否则进栈,为了防止undefined==undefined
        if(brackets[element]!=undefined&&brackets[element]==stack[stack.length-1]){
            stack.pop();
            //console.log("出栈");
        }else{
            //console.log("进栈");
            stack.push(element);
        }
    }
    //console.log(stack);
    return !stack.length;
};

let s = "[()]";
isValid(s);